Convert an image file to Base64
Encode by Marc Autret
var base64Encode = function F(/*str*/s) //-------------------------------------- { var ALPHA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='; var n = s.length, a = [], z = 0, c = 0, b, b0, b1, b2; while( c < n ) { b0 = s.charCodeAt(c++); b1 = s.charCodeAt(c++); b2 = s.charCodeAt(c++); var b = (b0 << 16) + ((b1 || 0) << 8) + (b2 || 0); a[z++] = ALPHA.charAt((b & (63 << 18)) >> 18); a[z++] = ALPHA.charAt((b & (63 << 12)) >> 12); a[z++] = ALPHA.charAt(isNaN(b1) ? 64 : ((b & (63 << 6)) >> 6)); a[z++] = ALPHA.charAt(isNaN(b2) ? 64 : (b & 63)); } s = a.join(''); a.length = 0; a = null; return s; }; var fileToBase64 = function(/*File|str*/f) //-------------------------------------- { var s = null; if( f && (f = new File(f)) && (f.encoding='BINARY') && f.open('r') ) { s = f.read(); f.close(); } return s && base64Encode(s); }; // Client code // --- var b64 = fileToBase64("my/path/to/image.jpg");
Decode by Marc Autret
var base64Decode = function F(/*str*/s) { var ALPHA = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; F.cache || F.cache = { RE_NON_ALPHA: new RegExp('[^' + ALPHA + ']'), RE_BAD_EQUALS: /\=([^=]|\=\=)/ }; if( (n % 4) || F.cache.RE_NON_ALPHA.test(s) || F.cache.RE_BAD_EQUALS.test(s) ) { throw Error("Invalid Base64 data"); } var fChr = String.fromCharCode, n = s.length >>> 0, a = [], c = 0, i0, i1, i2, i3, b, b0, b1, b2; while( c < n ) { i0 = ALPHA.indexOf(s[c++]); i1 = ALPHA.indexOf(s[c++]); i2 = ALPHA.indexOf(s[c++]); i3 = ALPHA.indexOf(s[c++]); b = (i0 << 18) + (i1 << 12) + ((i2 & 63) << 6) + (i3 & 63); b0 = (b & (255 << 16)) >> 16; b1 = (i2 == 64) ? -1 : (b & (255 << 8)) >> 8; b2 = (i3 == 64) ? -1 : (b & 255); a[a.length] = fChr(b0); if( 0 <= b1 ) a[a.length] = fChr(b1); if( 0 <= b2 ) a[a.length] = fChr(b2); } // Cleanup and return // --- s = a.join(''); a.length = 0; a = fChr = null; return s; };
base64.js by David Lindquis.
Link to the thread is here